﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI;
using System.Configuration;

using vHCS.HR.Business;
using vHCS.HR.Entities;
using Core.Message.Entities;
using Core.ExceptionHandling;
using Core.Controls.Message;
using System.Data;
using Core.Common.Session;
using Telerik.Web.UI;

#region K2 process

#endregion
//using SourceCode.Workflow.Management;
using vHCS.SYS.Entities;


namespace vHCS.K2App.MdlK2.Termination.Ver1
{
    public partial class TER_AppForApproved : Core.NTier.UserInterface.BaseFormNotPer
    {
        #region CONST

        protected const string _CMD_LAWDATE = "LawDate";

        #endregion
        # region Global
        private string EmpId = string.Empty;
        private long contractType = 0;
        #endregion

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!IsPostBack)
                {
                    hdfSharedUser.Value = Request.QueryString["SharedUser"] != null ? Request.QueryString["SharedUser"].ToString() : "";
                    TER_AppForResignationCollection collection = new TER_AppForResignationCollection();
                    TER_AppForResignationDTO dto = new TER_AppForResignationDTO();
                    if (Request.QueryString["sn"] != null)
                    {
                        try
                        {
                            string hrp = "";
                            string hr = "";
                            string excutor = "";
                            string direct = "";
                            string depthead = "";
                            try
                            {
                                string sn = Request.QueryString["sn"];
                                hdfEmpId.Value = K2CoreLib.K2Utils.GetDataField(sn, "EmpID", hdfSharedUser.Value);
                                hdfHierID.Value = K2CoreLib.K2Utils.GetDataField(sn, "HierID", hdfSharedUser.Value);
                                hdfNextApproved.Value = K2CoreLib.K2Utils.GetDataField(sn, "NextApproved", hdfSharedUser.Value);
                                hdfLeader.Value = K2CoreLib.K2Utils.GetDataField(sn, "Leader", hdfSharedUser.Value);
                                hdfManager.Value = K2CoreLib.K2Utils.GetDataField(sn, "Manager", hdfSharedUser.Value);
                                hdfID.Value = K2CoreLib.K2Utils.GetDataField(sn, "LeaveWorkID", hdfSharedUser.Value);
                                hrp = K2CoreLib.K2Utils.GetDataField(sn, "HRP", hdfSharedUser.Value);
                                hr = K2CoreLib.K2Utils.GetDataField(sn, "HRDeptHead", hdfSharedUser.Value);
                                direct = K2CoreLib.K2Utils.GetDataField(sn, "DirectSuperior", hdfSharedUser.Value);
                                depthead = K2CoreLib.K2Utils.GetDataField(sn, "DeptHead", hdfSharedUser.Value);
                                excutor = K2CoreLib.K2Utils.GetDataField(sn, "CB", hdfSharedUser.Value);
                                hdfSN.Value = sn;
                            }
                            catch (Exception ex)
                            {
                                btnBottomSubmit.Enabled = false;
                                btnTopSubmit.Enabled = false;
                                //BusinessLogicCustomException ex = new BusinessLogicCustomException("12634");
                                throw ex;
                            }

                            dtsApproveHistory.SelectParameters["Id"].DefaultValue = hdfID.Value;
                            dtgApprovedHistory.DataSourceID = dtsApproveHistory.ID;
                            dtgApprovedHistory.DataBind();
                            EmpId = hdfEmpId.Value;
                            //con.Close();

                            #region Hiển thi thông tin HRBP phê duyệt
                            if (!string.IsNullOrEmpty(hrp))
                            {
                                ClientScript.RegisterStartupScript(Page.GetType(), "ShowRework", "ShowRework();", true);
                                pnlType.Visible = true;
                                //Hiển thị cho phép chọn excutor
                                pnlExcutor.Visible = true;
                                pnlExitSurvey.Visible = true;
                                //Gan
                                string link = collection.GetSurveyLink(Convert.ToInt64(EmpId));
                                string[] arr_link = link.Split(';');

                                //Gán link survey do nhân viên làm
                                if (string.IsNullOrEmpty(arr_link[0]))
                                {
                                    hplSurvey_Emp.Text = "[Exit survey chưa được thực hiện]";
                                }
                                else
                                {
                                    hplSurvey_Emp.NavigateUrl = arr_link[0];
                                    hplSurvey_Emp.Text = arr_link[0];
                                }

                                //Gán link survey do hrbp làm
                                if (string.IsNullOrEmpty(arr_link[1]))
                                {
                                    hplSurver_HRBP.Text = "[Exit survey chưa được thực hiện]";
                                }
                                else
                                {
                                    hplSurver_HRBP.NavigateUrl = arr_link[1];
                                    hplSurver_HRBP.Text = arr_link[1];
                                }


                                if (!string.IsNullOrEmpty(depthead))
                                {
                                    //pnlType.Enabled = false;
                                    EnableCommentHRBP(false);
                                    pnlExcutor.Enabled = false;

                                    SetComboValue(cboExcutor, excutor, true);

                                    //Load thông tin HRBP nhập vào
                                    TER_AppForResignationCollection clApp = new TER_AppForResignationCollection();
                                    //Load thông tin lấy bên đơn xin thôi việc (Loại thôi việc, lý do thôi việc, blacklist)
                                    long terminaltype = 0;
                                    long terminalreason = 0;
                                    bool blacklist = false;
                                    string reason = "";
                                    Int16 propose;
                                    string str_proposenote = "";
                                    clApp.GetTermination(Convert.ToInt64(EmpId), out terminaltype, out terminalreason, out blacklist, out reason, out propose, out str_proposenote);
                                    SetComboValue(cboTerminalType, terminaltype, true);

                                    dtsTerminalReason.SelectParameters["terminationtypeid"].DefaultValue = terminaltype.ToString();
                                    cboTerminalReason.DataSourceID = dtsTerminalReason.ID;
                                    cboTerminalReason.DataBind();
                                    SetComboValue(cboTerminalReason, terminalreason, true);
                                    if (propose == 1) radAccept.Checked = true;
                                    else radRefuse.Checked = true;
                                    txtReasonComment.Text = str_proposenote;
                                    if (blacklist)
                                        radNo.Checked = true;
                                    else
                                        radYes.Checked = true;
                                    //
                                }
                            }
                            #endregion
                            //Nếu đã tồn tại user HRP -> tới cấp HRP phê duyệt thì không cho update ngày làm việc cuối cùng cấp trên phê duyệt

                            if (!string.IsNullOrEmpty(hr))
                            {
                                txtLastDateApprove.Enabled = false;
                            }
                        }
                        catch
                        {
                            MessageBox.ShowByMessCode("12274");
                        }

                        long id = Convert.ToInt64(EmpId);
                        dto = collection.SelectById(id);
                        contractType = this.LoadEmpInfo(EmpId);

                        //Gán Processid
                        hdfEformID.Value = collection.ReturnEformID(Convert.ToInt64(hdfID.Value));

                        if (dto != null)
                        {
                            LoadEmpForUpdate(dto);
                        }
                        else
                        {
                            btnTopSubmit.Enabled = true;
                            btnBottomSubmit.Enabled = true;
                        }

                    }
                    else
                    {
                        btnTopSubmit.Enabled = false;
                        btnBottomSubmit.Enabled = false;
                        MessageBox.ShowByMessCode("12274");
                    }
                }
            }
            catch (Exception ex)
            {
                AlertMessage message = UserInterfaceExceptionHandler.HandleExcetion(ex);
                MessageBox.Show(message);
            }

        }

        protected void LoadEmpForUpdate(TER_AppForResignationDTO dto)
        {
            this.txtRequestDate.SelectedDate = dto.RequireDate;

            this.txtLastDateMyDream.SelectedDate = dto.AspirateDate;
            this.txtLasDateForLaw.SelectedDate = dto.LawDate;
            if (dto.ApproveDate.Year > 1)
            {
                this.txtLastDateApprove.SelectedDate = dto.ApproveDate;
            }
            else
            {
                this.txtLastDateApprove.SelectedDate = null;
            }
            this.txtTerminalReason.Text = dto.LeaveWorkReason;
        }

        protected long LoadEmpInfo(string EmpId)
        {
            try
            {
                TER_DecideLeaveWorkCollection collection = new TER_DecideLeaveWorkCollection();
                HR_EmpHeaderInfoDTO dto = new HR_EmpHeaderInfoDTO();
                dto = collection.LoadEmpInfo(Convert.ToInt64(EmpId));
                if (dto != null)
                {
                    this.txtRequester.Text = dto.FullName;
                    this.txtOrgChart.Text = dto.OrgChart;
                    this.txtLocation.Text = dto.WorkingOffice;
                    this.txtStartDate.Text = dto.JoinDate.ToShortDateString();
                    this.txtEmpCode.Text = dto.EmpCode;
                    this.txtSignDate.Text = dto.EffectiveDate.ToShortDateString();
                    this.txtJobTitle.Text = dto.JobTitle;
                    hdfJobLevel.Value = dto.JobLevel;
                    hdfReportTo.Value = dto.ReportTo;
                    hdfUserName_Requester.Value = dto.UserName;

                    this.txtContractType.Text = dto.ContractName;

                    return dto.LSContractTypeID;
                }
            }
            catch (Exception ex)
            {
                AlertMessage mess = UserInterfaceExceptionHandler.HandleExcetion(ex);
                MessageBox.Show(mess);
            }
            return -1;
        }

        protected void btnTopSubmit_Click(object sender, EventArgs e)
        {
            lblError.Text = string.Empty;
            try
            {
                this.AddNewInfo();
            }
            catch (Exception ex)
            {
                AlertMessage mess = UserInterfaceExceptionHandler.HandleExcetion(ex);
                MessageBox.Show(mess);
            }
        }
        protected void btnBottomSubmit_Click(object sender, EventArgs e)
        {
            //this.AddNewInfo();
            lblError.Text = string.Empty;
            try
            {
                this.AddNewInfo();
            }
            catch (Exception ex)
            {
                AlertMessage mess = UserInterfaceExceptionHandler.HandleExcetion(ex);
                MessageBox.Show(mess);
            }
        }
        //Thêm mới,update thông tin xin thôi việc
        protected void AddNewInfo()
        {
            try
            {
                TER_AppForResignationCollection cl_ter = new TER_AppForResignationCollection();
                HR_WorkingRecordBL bl_wr = new HR_WorkingRecordBL();
                HR_WorkingRecordCollection cl_wr = new HR_WorkingRecordCollection();
                HIE_EmpInHierarchyCollection cl_emphie = new HIE_EmpInHierarchyCollection();
                K2Collection k2col = new K2Collection();
                vHCS.SYS.Business.SYS_MailTemplateCollection maillcollection = new vHCS.SYS.Business.SYS_MailTemplateCollection();
                EmpId = hdfEmpId.Value;
                //Submit lên K2
                string sn = Request.QueryString["sn"];
                int processInstance = K2CoreLib.K2Utils.GetWorklistItem(sn, hdfSharedUser.Value).ProcessInstance.ID;
                // if assign value to data field
                List<string> parms = new List<string>();
                //Get current version of Process
                string version = K2CoreLib.K2Utils.GetDataField(sn, "Version", hdfSharedUser.Value);

                //Gán Next Approver
                string depthead = K2CoreLib.K2Utils.GetDataField(sn, "DeptHead", hdfSharedUser.Value);
                string hrp = K2CoreLib.K2Utils.GetDataField(sn, "HRP", hdfSharedUser.Value);
                string hr = K2CoreLib.K2Utils.GetDataField(sn, "HRDeptHead", hdfSharedUser.Value);
                string cb = K2CoreLib.K2Utils.GetDataField(sn, "CB", hdfSharedUser.Value);
                string hier = K2CoreLib.K2Utils.GetDataField(sn, "HierID", hdfSharedUser.Value);
                string direct = K2CoreLib.K2Utils.GetDataField(sn, "DirectSuperior", hdfSharedUser.Value);
                string cbtest = K2CoreLib.K2Utils.GetDataField(sn, "CBTest", hdfSharedUser.Value);
                string EmpID = K2CoreLib.K2Utils.GetDataField(sn, "EmpID", hdfSharedUser.Value);
                string requester = K2CoreLib.K2Utils.GetDataField(sn, "Requester", hdfSharedUser.Value);
                string approver = "";
                string DeptName="";
                long role = 0;
                K2Collection colK2 = new K2Collection();
                vHCS.SYS.Business.SYS_MailTemplateCollection cl_mail = new SYS.Business.SYS_MailTemplateCollection();
                HIE_HierarchyCollection cl_hie=new HIE_HierarchyCollection();
                HIE_HierarchyBL bl_hie=new HIE_HierarchyBL();

                //Gán bộ phận
                long DivID = cl_emphie.SelectDivHie(Convert.ToInt64(hier));
                string DivName = "";
                bl_hie = cl_hie.SelectByID(DivID);
                if (bl_hie.DTO != null)
                {
                    DivName = bl_hie.HierarchyCode;
                }

                bl_hie=cl_hie.SelectByID(Convert.ToInt64(hier));
                if(bl_hie.DTO!=null)
                {
                    DeptName+=bl_hie.HierarchyCode;
                }


                if (!cboActions.SelectedValue.Equals("Return"))
                {
                    if (string.IsNullOrEmpty(hrp)) //Quy trình kế tiếp được gửi tới cho HRBP
                    {
                        string HRBP = colK2.GetUserOfHRPLeader(Convert.ToInt64(EmpID));

                        parms.Add("HRP");
                        parms.Add(HRBP);
                        parms.Add("MailHRP");
                        parms.Add(cl_mail.ReturnEmail(HRBP));
                        role = 14;//Gán role phê duyệt là Reporting Line
                    }
                    else 
                    {
                        if (string.IsNullOrEmpty(depthead)) //Quy trình kế tiếp được gửi tới cho DeptHead
                        {
                            //Nếu là cấp HRP đang phê duyệt thì cập nhật lại thông tin trường hợp này có tuyển lại hay không
                            cl_ter.UpdateRework(Convert.ToInt64(hdfID.Value), radYes.Checked?true:false);
                            Int16 propose =Convert.ToInt16(radAccept.Checked == true ? 1 : 0);
                            cl_ter.UpdateTerminationType(Convert.ToInt64(hdfID.Value), Convert.ToInt64(cboTerminalReason.SelectedValue), Convert.ToInt64(cboTerminalType.SelectedValue), txtReasonComment.Text, propose);
                            parms.Add("CB");
                            parms.Add(cboExcutor.SelectedValue);
                            parms.Add("MailCB");
                            parms.Add(cl_mail.ReturnEmail(cboExcutor.SelectedValue));
                            //
                            approver = colK2.GetLeaderOfHierarchy(Convert.ToInt64(string.IsNullOrEmpty(hier) ? "0" : hier));
                            //if (direct.Equals(approver))// Nếu Dept Head trùng với Reporting Line thì bỏ qua bước Dept Head duyệt -> HR Dept Head
                            //{
                            //    parms.Add("DeptHead");
                            //    parms.Add(approver);
                            //    parms.Add("HRDeptHead");
                            //    parms.Add(colK2.GetUserOfHR());
                            //}
                            //else  // Quy trình gửi tới cho Dept Head duyệt
                            //{
                                parms.Add("DeptHead");
                                parms.Add(approver);
                            //}
                            role = 11;//Gán role phê duyệt là HRBP
                        }
                        else
                        {
                            if (string.IsNullOrEmpty(hr)) //Quy trình được gửi tới cho HR Dept Head duyệt
                            {
                                approver = colK2.GetUserOfHR();
                                parms.Add("HRDeptHead");
                                parms.Add(approver);
                                role = 1;//Gán role phê duyệt là Dept Head
                            }
                            else
                            {
                                if (string.IsNullOrEmpty(cbtest))//Quy trình được gửi tới cho C&B duyệt
                                {
                                    role = 13;//Gán role phê duyệt là HR Dept Head
                                    parms.Add("CBTest");
                                    parms.Add(cb);

                                    #region Gán thông tin gửi mail cho IT, AF, FA...
                                    SYS_MailTemplateDTO _mailItAfFa = new SYS_MailTemplateDTO();
                                    _mailItAfFa = cl_mail.GetMailContentWithSignature("Termination_SendMailCheckList", "K2-Signature");

                                    string MailContent_Exit = _mailItAfFa.ContentVN;
                                    string MailSubject_Exit = _mailItAfFa.TitleVN; 

                                    MailSubject_Exit = MailSubject_Exit.Replace("$FullName$", txtRequester.Text.Trim());
                                    MailSubject_Exit = MailSubject_Exit.Replace("$Dept$",DeptName);
                                    //MailSubject_Exit = MailSubject_Exit.Replace("$LastWorkingDate$", Convert.ToDateTime(txtLastDateApprove.SelectedDate).ToShortDateString());

                                    MailContent_Exit = MailContent_Exit.Replace("$EmpCode$", txtEmpCode.Text);
                                    MailContent_Exit = MailContent_Exit.Replace("$FullName$",txtRequester.Text);
                                    MailContent_Exit = MailContent_Exit.Replace("$Userdomain$", hdfUserName_Requester.Value);
                                    MailContent_Exit = MailContent_Exit.Replace("$Dept$",DivName+"/"+ DeptName);
                                    MailContent_Exit = MailContent_Exit.Replace("$JobTitle$", txtJobTitle.Text);
                                    MailContent_Exit = MailContent_Exit.Replace("$JobLevel$", hdfJobLevel.Value);
                                    MailContent_Exit = MailContent_Exit.Replace("$ReportingLine$", hdfReportTo.Value);
                                    MailContent_Exit = MailContent_Exit.Replace("$LastWorkingDate$", Convert.ToDateTime(txtLastDateApprove.SelectedDate).ToShortDateString());

                                    parms.Add("MailSubject_Exit");
                                    parms.Add(MailSubject_Exit);
                                    parms.Add("MailContent_Exit");
                                    parms.Add(MailContent_Exit);
                                    parms.Add("MailList");
                                    //Lấy danh sách email cần gửi
                                    List<string> ListApprover = cl_ter.GetListApproverExitCheckList(Convert.ToInt64(hdfEmpId.Value)).Split(';').ToList<string>();
                                    string emaillist = "";
                                    foreach (string userapprove in ListApprover)
                                    {
                                        if(!string.IsNullOrEmpty(userapprove))
                                            emaillist = emaillist + ";" + cl_mail.ReturnEmail(userapprove);
                                    }
                                    //Lấy thông tin đia chỉ mail cần gửi đến
                                    string EmailTo = "";

                                    DataTable table = k2col.GetValueK2ByCode("TERINFOCHANGE");
                                    if (table.Rows.Count > 0)
                                    {
                                        foreach (DataRow row in table.Rows)
                                        {
                                            EmailTo += ";" + maillcollection.ReturnEmail(row["Value"].ToString().Trim());
                                        }
                                    }

                                    string emailall = (emaillist + ";" + cl_mail.ReturnEmail(hdfUserName_Requester.Value)).Trim(';') + EmailTo;
                                    while (emailall.IndexOf(";;") > 0)
                                    {
                                        emailall = emailall.Replace(";;", ";");
                                    }

                                    //
                                    parms.Add(emailall);

                                    #endregion

                                    #region Gán thông tin gửi mail hướng dẫn exit checklist

                                    SYS_MailTemplateDTO _mailGuide = new SYS_MailTemplateDTO();
                                    _mailGuide = cl_mail.GetMailContentWithSignature("Termination_GuideCheckList", "K2-Signature");
                                    string MailContent_Guide = _mailGuide.ContentVN;
                                    string MailSubject_Guide = _mailGuide.TitleVN;

                                    string str_lastworkingdate = Convert.ToDateTime(txtLastDateApprove.SelectedDate).ToShortDateString();

                                    MailContent_Guide = MailContent_Guide.Replace("$Account$",hdfUserName_Requester.Value);
                                    MailContent_Guide = MailContent_Guide.Replace("$LastWorkingDate$", str_lastworkingdate);

                                    MailSubject_Guide = MailSubject_Guide.Replace("$LastWorkingDate$", str_lastworkingdate);

                                    parms.Add("MailSubject_Guide");
                                    parms.Add(MailSubject_Guide);
                                    parms.Add("MailContent_Guide");
                                    parms.Add(MailContent_Guide);
                                    #endregion

                                    #region Gán thông tin gửi mail hướng dẫn làm thủ tục thôi việc
                                    SYS_MailTemplateDTO _mailProcedureGuide = new SYS_MailTemplateDTO();
                                    _mailProcedureGuide = cl_mail.GetMailContentWithSignature("RMD_Terminal_Guide", "K2-Signature");
                                    string MailContent_GuideTer = _mailProcedureGuide.ContentVN; // cl_mail.ReturnMailContent("RMD_Terminal_Guide");
                                    string MailSubject_GuideTer = _mailProcedureGuide.TitleVN;

                                    MailContent_GuideTer = MailContent_GuideTer.Replace("$UserName$", hdfUserName_Requester.Value);
                                    MailContent_GuideTer = MailContent_GuideTer.Replace("$LastWorkingDate$", Convert.ToDateTime(txtLastDateApprove.SelectedDate).ToShortDateString());
                                    MailContent_GuideTer = MailContent_GuideTer.Replace("$link$","http://www.vieclamhcm.net/Default.aspx?tabid=136");

                                    parms.Add("MailSubject_GuideTer");
                                    parms.Add(MailSubject_GuideTer);
                                    parms.Add("MailContent_GuideTer");
                                    parms.Add(MailContent_GuideTer);
                                    #endregion
                                }
                                else
                                    role = 12;//Gán role phê duyệt là C&B
                            }
                        }
                    }
                }
                else //Nếu user return thì sẽ set toàn bộ các datafield người phê duyệt về null
                {
                    if (!string.IsNullOrEmpty(cbtest)) //Xác định bước đang phê duyệt là C&B
                    {
                        parms.Add("CBTest");
                        parms.Add("");
                        role = 12;
                    }
                    else //Nếu không phải là bước C&B phê duyệt thì gán rỗng cho HRBP và DeptHead (dùng để ẩn hiện các thông tin HRBP phê duyệt)
                    {
                        parms.Add("DeptHead");
                        parms.Add("");
                        parms.Add("HRP");
                        parms.Add("");

                        if (string.IsNullOrEmpty(hrp))
                        {
                            role = 14;//Gán role phê duyệt là Reporting line
                        }
                        else
                        {
                            if (string.IsNullOrEmpty(depthead))
                                role = 11;//Gán role phê duyệt là HRBP
                            else if (string.IsNullOrEmpty(hr))
                                role = 1;//Gán role phê duyệt là Dept Head
                            else if (string.IsNullOrEmpty(cbtest))
                                role = 13;//Gán role phê duyệt là HR Admin
                            else
                                role = 12;//Gán role phê duyệt là C&B
                        }
                    }
                }
                //

                #region Xử lý gửi mail khi approver approve/reject
                //Lấy nội dung mail gửi trạng thái phê duyệt
                string MailContent_Approve = "";
                string MailSubject_Approve = "";
                string MailContent_Approve_Request = "";
                
                //Trường hợp nếu là Dept Head phê duyệt là Approve thì phải gửi mail theo mẫu riêng
                if (parms.Count() > 0 && parms[0].Equals("HRP") && cboActions.SelectedValue == "Approve")
                {
                    MailContent_Approve_Request = cl_mail.GetMailContentWithSignature("Termination_ApproveDept", "K2-Signature").ContentVN;
                    MailContent_Approve_Request = MailContent_Approve_Request.Replace("$Creator$", hdfUserName_Requester.Value);
                    MailContent_Approve_Request = MailContent_Approve_Request.Replace("$Status$", cboActions.SelectedValue);
                    MailContent_Approve_Request = MailContent_Approve_Request.Replace("$Approver$", SessionManager.UserDomain);
                    parms.Add("MailApprover_Content_Request");
                    parms.Add(MailContent_Approve_Request);
                }

                SYS_MailTemplateDTO _mailApprove = new SYS_MailTemplateDTO();
                _mailApprove = cl_mail.GetMailContentWithSignature("Termination_Approve", "K2-Signature");

                MailContent_Approve = _mailApprove.ContentVN;

                string emailapprove = "";

                MailContent_Approve = MailContent_Approve.Replace("$Creator$", hdfUserName_Requester.Value);
                MailContent_Approve = MailContent_Approve.Replace("$Status$", cboActions.SelectedValue);
                MailContent_Approve = MailContent_Approve.Replace("$Approver$", SessionManager.UserDomain);
                if (!cboActions.SelectedValue.Equals("Return"))
                {
                    MailContent_Approve = MailContent_Approve.Replace("$url$", ConfigurationManager.AppSettings.Get("History_TER") + hdfID.Value + "&User=" + hdfUserName_Requester.Value);
                }
                else
                    MailContent_Approve = MailContent_Approve.Replace("$url$", ConfigurationManager.AppSettings.Get("LinkTerminationReturn"));


                MailSubject_Approve = _mailApprove.TitleVN;
                MailSubject_Approve = MailSubject_Approve.Replace("$Status$", cboActions.SelectedValue);
                MailSubject_Approve = MailSubject_Approve.Replace("$Creator$", requester);
                MailSubject_Approve = MailSubject_Approve.Replace("$Account$",hdfUserName_Requester.Value);
                //Lấy Hierarchycode của node depthead
                bl_wr = cl_wr.SelectLastWRByEmpID(Convert.ToInt64(hdfEmpId.Value));
                long hie_dept = cl_emphie.SelectDeptHie(bl_wr.HierarchyId);//Lấy node depthead
                bl_hie = cl_hie.SelectByID(hie_dept);
                //
                MailSubject_Approve = MailSubject_Approve.Replace("$Dept$",bl_hie.HierarchyCode);

                //Lấy email người approve
                emailapprove = cl_mail.ReturnEmail(SessionManager.UserDomain);

                parms.Add("MailApprover");
                parms.Add(emailapprove);
                parms.Add("MailApprover_Content");
                parms.Add(MailContent_Approve);
                parms.Add("MailApprover_Subject");
                parms.Add(MailSubject_Approve);

                #endregion

                K2CoreLib.K2Utils.ActionExecute(sn, cboActions.SelectedValue, hdfSharedUser.Value, parms.ToArray());
                //Insert History Comment
                K2CoreLib.K2Utils.InsertHistoryComment(hdfEformID.Value, SessionManager.UserDomain);
                //End Submit lên K2

                string Hisstatus = "Approved";

                try
                {
                    string sAction = cboActions.SelectedValue;

                    #region Gán thông tin để cập nhật lại status và ngày làm việc được cấp trên phê duyệt
                    TER_AppForResignationBL dto = new TER_AppForResignationBL();
                    TER_AppForResignationCollection collection = new TER_AppForResignationCollection();
                    dto.EmpID = Convert.ToInt64(EmpId);
                    dto.IsApprove = 0;
                    dto.RequireDate = Convert.ToDateTime(txtRequestDate.SelectedDate);
                    dto.AspirateDate = Convert.ToDateTime(txtLastDateMyDream.SelectedDate);
                    dto.ApproveDate = Convert.ToDateTime(txtLastDateApprove.SelectedDate);
                    dto.LawDate = Convert.ToDateTime(txtLasDateForLaw.SelectedDate);
                    dto.LeaveWorkReason = System.Text.RegularExpressions.Regex.Replace(this.txtTerminalReason.Text.Trim(), "<[^>]*>", string.Empty);
                    #endregion

                    //Nếu tình trạng process hoàn thành
                    if (sAction.Equals("Approve") && !string.IsNullOrEmpty(cbtest))
                    {
                        //Cập nhật lại trạng thái của thông tin
                        dto.IsApprove = 1;
                    }

                    if (sAction.Equals("Return"))
                    {
                        Hisstatus = "Return";
                    }

                    if (sAction.Equals("Reject")) //Nếu tình trạng process là từ chối
                    {
                        cl_ter.Delete(Convert.ToInt64(hdfID.Value));
                        Hisstatus = "Rejected";
                    }

                    //Cập nhật thông tin xin thôi việc
                    collection.UpdateExc(dto);
                }
                catch
                {
                    MessageBox.Show("Loi", "Loi do update");
                }

                try
                {
                    #region begin to save history
                    HR_WorkingRecordCollection cl_his = new HR_WorkingRecordCollection();
                    cl_his.InsertHistory(Convert.ToInt64(hdfID.Value), DateTime.Now, SessionManager.UserDomain, "Approver Step", Hisstatus, txtGhichu_approve.Text.Trim(), 2, role);

                    #endregion End save
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error", ex.Message);
                }

                MessageBox.ShowByMessCode("10010");
                this.btnTopSubmit.Enabled = false;
                this.btnBottomSubmit.Enabled = false;
                ClientScript.RegisterStartupScript(Page.GetType(), "ClosePage", "ClosePage();", true);
            }
            catch (Exception ex)
            {
                AlertMessage mess = UserInterfaceExceptionHandler.HandleExcetion(ex);
                MessageBox.Show(mess);
            }
        }
        protected void ajxManager_AjaxRequest(object sender, Telerik.Web.UI.AjaxRequestEventArgs e)
        {
            try
            {
                if (e.Argument.Equals(_CMD_LAWDATE))
                {
                    TER_AppForResignationCollection collection = new TER_AppForResignationCollection();
                    this.txtLasDateForLaw.SelectedDate = collection.GenerateLawDate(Convert.ToDateTime(this.txtRequestDate.SelectedDate), contractType);
                    this.txtLastDateMyDream.SelectedDate = collection.GenerateLawDate(Convert.ToDateTime(this.txtRequestDate.SelectedDate), contractType);
                    this.txtLastDateMyDream.DataBind();
                    this.txtLasDateForLaw.DataBind();
                }

            }
            catch (Exception ex)
            {
                AlertMessage mess = UserInterfaceExceptionHandler.HandleExcetion(ex);
                MessageBox.Show(mess);
            }

        }
        protected void SetEmpty()
        {
            try
            {
                txtRequestDate.SelectedDate = null;
                txtLastDateMyDream.SelectedDate = null;
                txtLasDateForLaw.SelectedDate = null;
                txtLastDateApprove.SelectedDate = null;
                txtTerminalReason.Text = null;
            }
            catch (Exception ex)
            {
                AlertMessage mess = UserInterfaceExceptionHandler.HandleExcetion(ex);
                MessageBox.Show(mess);
            }

        }

        /// <summary>
        /// Load lý do thôi việc,thông tin người ký theo loại thôi việc
        /// <param name="e"></param>
        /// <param name="sender"></param>
        /// </summary>
        protected void cboTerminalType_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)
        {
            try
            {
                long typeid = 0;
                long.TryParse(cboTerminalType.SelectedValue, out typeid);
                dtsTerminalReason.SelectParameters["terminationtypeid"].DefaultValue = typeid.ToString();
                dtsTerminalReason.CacheClear();
                cboTerminalReason.DataBind();
            }
            catch (Exception ex)
            {
                AlertMessage message = UserInterfaceExceptionHandler.HandleExcetion(ex);
                MessageBox.Show(message);
            }
        }

        public void EnableCommentHRBP(bool enable)
        {
            try
            {
                cboTerminalType.Enabled = enable;
                cboTerminalReason.Enabled = enable;
                radAccept.Enabled = enable;
                radRefuse.Enabled = enable;
                txtReasonComment.ReadOnly = !enable;
                radYes.Enabled = enable;
                radNo.Enabled = enable;
            }
            catch (Exception ex)
            {
                AlertMessage message = UserInterfaceExceptionHandler.HandleExcetion(ex);
                MessageBox.Show(message);
            }
        }
    }
}